package cn.jcby.app.lebu.controller.req;

import cn.jcby.app.lebu.enums.MotionTypeEnum;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author: lihaotian
 * @since: 2023/12/15 17:42
 * @description
 **/
@Data
@ApiModel(value = "添加用户运动计划请求", description = "添加用户运动计划请求")
public class AddUserMotionPlanReq {
    @ApiModelProperty(value = "室内外:1室内2室外")
    @NotNull(message = "doorType不能为空")
    private Integer doorType;
    @ApiModelProperty(value = "运动类型字典")
    @NotBlank(message = "运动类型不能为空")
    private String motionType;
    @ApiModelProperty(value ="场馆位置/起点位置名称")
    @NotBlank(message = "场馆位置/起点位置名称不能为空")
    private String locationName ;

    @ApiModelProperty("终点位置名称")
    private String endName ;

    @ApiModelProperty("场馆位置/起点位置坐标：POINT(经度 纬度)")
    @NotBlank(message = "场馆位置/起点位置坐标不能为空")
    private String beginPoint ;

    @ApiModelProperty("终点位置坐标：POINT(经度 纬度)")
    private String endPoint ;

    @ApiModelProperty("运动开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "运动开始时间不能为空")
    private Date beginTime;
    @ApiModelProperty("路线:LINESTRING(经度 纬度,经度 纬度)")
    private String route ;
    @ApiModelProperty("运动里程:字典")
    private String motionMileageCode ;
    //能量包、场地费、是否需要会员
    @ApiModelProperty("能量包")
    @NotBlank(message = "能量包不能为空")
    private String emergeCode ;
    @ApiModelProperty("场地费:单位分")
    private BigDecimal venueFees ;
    @ApiModelProperty("是否需要会员:是否需要会员：1需要2不需要")
    private Integer neededVenue ;


    @ApiModelProperty("限制性别:0: 女,1:男，2：不限制")
    @NotNull(message = "限制性别不能为空")
    private Integer limitGender = 2;


    public void check(){
        //室内：场地费、是否会员不能为空
        Assert.isFalse(doorType != null && (doorType>2||doorType<1), "doorType只能选择1室内，2室外");
        if(doorType == 1){
            Assert.isFalse(venueFees == null, "室内运动场地费不能为空");
            Assert.isFalse(neededVenue == null, "是否需要会员不能为空");
        }else{
            //如果运动类型为跑步、健走、骑行验证下面内容，如果为其他验证室内
            if(MotionTypeEnum.RUN.getCode().equals(motionType)
                    || MotionTypeEnum.BIKE.getCode().equals(motionType)
                    || MotionTypeEnum.WALK.getCode().equals(motionType))
           //室外：标题、终点位置、终点坐标、运动里程不能为空
            {
                //Assert.isFalse(StringUtils.isBlank(title), "标题不能为空");
                Assert.isFalse(StringUtils.isBlank(endName), "终点位置不能为空");
                Assert.isFalse(StringUtils.isBlank(endPoint), "终点位置坐标不能为空");
                //Assert.isFalse(planWholeCourse== null, "全程不能为空");
                Assert.isFalse(StringUtils.isBlank(motionMileageCode), "运动里程不能为空");
                //Assert.isFalse(StringUtils.isBlank(route),"轨迹不能为空");
            }else{
                Assert.isFalse(venueFees == null, "室内运动场地费不能为空");
                Assert.isFalse(neededVenue == null, "是否需要会员不能为空");
            }
        }
    }

}
